package top.gangster.lunan.templateservice.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mysql.cj.util.StringUtils;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.gangster.lunan.templateservice.entity.TemplateContract;
import top.gangster.lunan.templateservice.entity.TemplateContractField;
import top.gangster.lunan.templateservice.mapper.TemplateContractMapper;
import top.gangster.lunan.templateservice.service.TemplateContractFieldService;
import top.gangster.lunan.templateservice.service.TemplateContractService;

/**
 * <p>
 * 合同模板的所有信息 服务实现类
 * </p>
 *
 * @author kid
 * @since 2021-11-06
 */
@Service
public class TemplateContractServiceImpl extends ServiceImpl<TemplateContractMapper, TemplateContract> implements TemplateContractService {
	// 注入FieldService类
	@Autowired
	TemplateContractFieldService fieldService;

	/**
	 * 根据所属合同模板id查找出所有模板字段
	 * @param templateId 合同模板id
	 * @return List
	 */
	public List<TemplateContractField> getFieldsByTemplateId(String templateId) {
		QueryWrapper<TemplateContractField> wrapper = new QueryWrapper<>();
		wrapper.eq("template_id",templateId).orderByDesc("create_time");
		return fieldService.list(wrapper);
	}

	/**
	 * 根据模板名进行模糊分页查询
	 * @param current 当前页
	 * @param limit 页大小
	 * @param name 模糊匹配模板名
	 * @return 模糊分页查询结果
	 */
	@Override
	public Page<TemplateContract> getTemplate(Long current, Long limit, String name) {
		Page<TemplateContract> page = new Page<>(current, limit);
		QueryWrapper<TemplateContract> wrapper = new QueryWrapper<>();
		wrapper.orderByDesc("create_time");
		if (!StringUtils.isEmptyOrWhitespaceOnly(name)) {
			wrapper.like("name",name);
		}
		return (Page<TemplateContract>) this.page(page, wrapper);
	}

	/**
	 * 指定某个合同模板id，将合同模板字段作为该模板的字段保存在数据库
	 * @param templateId 所属合同模板的id
	 * @param fields 合同模板字段
	 * @return is saved?
	 */
	public boolean saveFields(String templateId, List<TemplateContractField> fields) {
		if (fields == null) {
			return true;
		}
		for (TemplateContractField field : fields) {
			field.setTemplateId(templateId);
		}
		return fieldService.saveBatch(fields);
	}

	/**
	 * 根据模板文件id删除其所有模板字段
	 *
	 * @param templateId 模板文件id
	 * @return 是否成功删除
	 */
	@Override
	public boolean removeFieldsByTemplateId(String templateId) {
		QueryWrapper<TemplateContractField> wrapper = new QueryWrapper<>();
		wrapper.eq("template_id",templateId);
		return fieldService.remove(wrapper);
	}
}
